package com.zc.config;

import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

/**
 * @description:
 * @author: cong
 * @create: 2025/3/4
 */
@Configuration
public class i18nConfig {
    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver resolver = new SessionLocaleResolver();
        resolver.setDefaultLocale(java.util.Locale.CHINA);
        return resolver;
    }

    /**
     * 配置并返回一个MessageSource bean，用于国际化消息的解析
     * 该方法选择了ResourceBundleMessageSource作为消息源，适合于资源文件不常修改的场景
     *
     * @return MessageSource接口的实现类实例，用于处理国际化消息
     */
    @Bean
    public MessageSource messageSource() {
        // 适合资源文件需要频繁修改的场景，使用的是spring的Resource接口
//        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();

        // 使用的是JDK的ResourceBundle类加载资源文件，不支持动态重载，适用于资源文件不常修改的场景
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename("i18n/messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

    /**
     * 创建并配置一个LocalValidatorFactoryBean实例
     *
     * @param messageSource 用于解析验证消息的消息源
     * @return 配置好的LocalValidatorFactoryBean实例
     */
//    @Bean
//    public LocalValidatorFactoryBean localValidatorFactoryBean(MessageSource messageSource) {
//        // 初始化LocalValidatorFactoryBean对象
//        LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
//        // 设置验证消息的消息源
//        bean.setValidationMessageSource(messageSource);
//        return bean;
//    }

}
